一、前言
前幾天實際使用天氣 API 後,
已經可以透過不同的座標查詢台北、台中和高雄的天氣資料,也比較了三個地點的溫度、濕度和風速。
今天要和前面分析書籍 API、電影 API 的方式一樣,
進一步觀察天氣 API 的 JSON 是怎麼組成的。
這次會以實際查詢到的天氣資料為例,
先了解資料的不同層級。
⸻
二、天氣 API 回傳的資料
以其中一次查詢結果為例,可以看到:
{
"latitude": 24.147627,
"longitude": 120.70138,
"generationtime_ms": 0.0826120376586914,
"utc_offset_seconds": 0,
"timezone": "GMT",
"timezone_abbreviation": "GMT",
"elevation": 94.0,
"current_units": {
"time": "iso8601",
"interval": "seconds",
"temperature_2m": "°C",
"relative_humidity_2m": "%",
"wind_speed_10m": "km/h"
},
"current": {
"time": "2026-09-20T05:30",
"interval": 900,
"temperature_2m": 33.5,
"relative_humidity_2m": 48,
"wind_speed_10m": 14.9
}
}
如果第一次看到這樣的資料,可能會覺得內容很多,
但實際上可以先把它分成幾個主要部分來看,
例如最外層的
latitude
longitude
generationtime_ms
utc_offset_seconds
timezone
timezone_abbreviation
elevation
current_units
current
這些都是最外層的資料。
⸻
三、最外層的 JSON
這次天氣 API 回傳的最外層是一個 Object,
使用 { } 包住。
在這個 Object 裡面放了很多不同的 Key 和 Value。
例如:
"latitude": 24.147627
"longitude": 120.70138
這些就是最外層的資料。
另外也可以看到:
"current_units": { ... }
"current": { ... }
這兩個比較特別,因為它們的 Value 又是一個 Object。
也就是說,
JSON 裡面還可以再放另一個 JSON Object。
這就是前面學過的巢狀結構。
⸻
四、current_units
在這次的 JSON 中,有一個:
"current_units": {
...
}
打開之後,可以看到:
"time": "iso8601"
"interval": "seconds"
"temperature_2m": "°C"
"relative_humidity_2m": "%"
"wind_speed_10m": "km/h"
這些資料不是直接和 latitude、longitude 放在同一層,而是被放在 current_units 裡面。
可以把它理解成:
整個 JSON
│
├── latitude
├── longitude
├── timezone
├── elevation
│
├── current_units
│ ├── time
│ ├── interval
│ ├── temperature_2m
│ ├── relative_humidity_2m
│ └── wind_speed_10m
│
└── current
├── time
├── interval
├── temperature_2m
├── relative_humidity_2m
└── wind_speed_10m
這樣看就會比較容易理解資料的層級。
⸻
五、current
另外一個比較重要的 Object 是:
"current": {
...
}
裡面同樣還有其他資料:
"time": "2026-09-20T05:30"
"interval": 900
"temperature_2m": 33.5
"relative_humidity_2m": 48
"wind_speed_10m": 14.9
這些資料就是這次查詢中目前天氣相關的資料。
可以發現 current 和 current_units 裡面有一些名稱是相同的,
例如:
temperature_2m
relative_humidity_2m
wind_speed_10m
但兩邊放的內容不同
例如:
current_units
→ temperature_2m: "°C"
current
→ temperature_2m: 33.5
一邊是單位,另一邊則是實際查詢到的數值。
⸻
六、把天氣 API 的 JSON 結構整理起來
經過這次分析,可以先把這份 JSON 簡單整理成:
JSON Object
│
├── 基本資料
│ ├── latitude
│ ├── longitude
│ ├── timezone
│ └── elevation
│
├── current_units
│ ├── time
│ ├── interval
│ ├── temperature_2m
│ ├── relative_humidity_2m
│ └── wind_speed_10m
│
└── current
├── time
├── interval
├── temperature_2m
├── relative_humidity_2m
└── wind_speed_10m
可以看到,
雖然 API 回傳的是一整份 JSON,
但其實可以依照不同的 Object 把資料分成幾個區塊。
這也和之前電影 API 中的 show、network 的巢狀 Object 有點類似。
⸻
七、總結
今天主要分析了天氣 API 回傳的 JSON 結構。
從實際資料中可以看到,
最外層是一個 Object,裡面包含位置、時區、海拔等資料,
也包含 current_units 和 current 兩個更深一層的 Object。
其中 current_units 負責放資料的單位,
而 current 則放這次查詢到的目前天氣資料。
透過把 JSON 拆成不同層級,
可以發現原本看起來很長的一串資料,
其實是按照一定的結構排列的。
前面學習書籍和電影 API 時,
也都有遇到類似的 JSON 結構
這次再次練習之後對於閱讀 API 回傳資料的方式也更加熟悉。
下一次會繼續從這份 JSON 中挑出實際需要的欄位,
進一步分析每個資料代表什麼。